package file;

import java.io.File;
import java.io.FileFilter;

/**
 *
 * filter:过滤器
 *
 * 有条件的获取一个目录中的子项
 *
 * File有个重载的listFiles方法，允许我们传入一个文件过滤器，
 * 并在该过滤器上定义过滤条件，之后listFiles执行完毕会将目录
 * 中所有满足过滤器要求的子项进行返回
 */
public class ListFilesDemo2 {
    public static void main(String[] args) {
        //获取当前目录中名字里含有字母"o"的子项
        File dir = new File(".");
        /*
            File listFiles(FileFilter filter);
            该方法会将该目录中没一个子项都作为参数先传给filter的accept方法
            只有accept方法返回为true的子项最终才会被包含在返回的File[]数组
            中进行返回。
         */
        FileFilter filter = new FileFilter(){
            @Override
            public boolean accept(File file) {
                System.out.println("正在过滤："+file.getName());
                return file.getName().contains("o");
            }
        };
        File[] subs = dir.listFiles(filter);
        System.out.println("共："+subs.length+"个含有字母o的子项");
        for(File sub:subs){
            System.out.println(sub.getName());
        }
    }
}

class MyFilter implements FileFilter{

    @Override
    public boolean accept(File file) {
        //过滤条件是名字中含有"o"的
        String name = file.getName();

//        String regex = ".*o.*";//正则表达式写法
//        boolean match = name.matches(regex);

//        name.indexOf("o")>=0;

        return name.contains("o");
    }
}